package love.model;

import java.util.HashMap;

import love.actions.AbstractAction;
import love.actions.ActionFactory;

public class Carte {

	private String nom;
	private int numero;
	private ETypeCarte type;
	private AbstractAction action;
	
	public Carte(String nom, int numero, ETypeCarte type) {
		super();
		this.nom = nom;
		this.numero = numero;
		this.type = type;
		action = ActionFactory.getInstance().getAction(this);
	}
	
	public String getNom() {
		return nom;
	}
	
	public void setNom(String nom) {
		this.nom = nom;
	}
	
	public int getNumero() {
		return numero;
	}
	
	public void setNumero(int numero) {
		this.numero = numero;
	}
	
	public boolean jouer(Joueur joueur){
		return action.doIt(joueur);
	}
	
	public ETypeCarte getType() {
		return type;
	}

	public AbstractAction getAction() {
		return action;
	}

	@Override
	public String toString() {
		return "Carte [nom=" + nom + ", numero=" + numero + "]";
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nom == null) ? 0 : nom.hashCode());
		result = prime * result + numero;
		return result;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Carte other = (Carte) obj;
		if (nom == null) {
			if (other.nom != null)
				return false;
		} else if (!nom.equals(other.nom))
			return false;
		if (numero != other.numero)
			return false;
		return true;
	}

	public void getIt(Joueur joueur) {
		action.getIt(joueur);
	}

	public HashMap<String, Object> getDescription() {
		HashMap<String, Object> descr = new HashMap<String, Object>();
		
		descr.put("id_card", numero);
		descr.put("num_card", numero);
		descr.put("name_card", type);
		
		return descr;
	}
	
	
}
